﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Theme3
{
    /// <summary>Тип Треугольника.</summary>
    public enum TriangleType
    {
        /// <summary>Неизвестный.</summary>
        Unknown = 0,
        /// <summary>Вырожденный.</summary>
        Degenerated = 1,
        /// <summary>Равносторонний.</summary>
        Equilateral = 2,
        /// <summary>Равнобедренный.</summary>
        Isosceles = 3,
        /// <summary>Прямоугольный.</summary>
        Rectangular = 4,
    }

    public class TriangleChecker
    {
        /// <summary>
        /// Определить тип Треугольника по значениям длин трех сторон.
        /// </summary>
        /// <param name="a">Длина стороны A, значение должно быть строго больше нуля.</param>
        /// <param name="b">Длина стороны B, значение должно быть строго больше нуля.</param>
        /// <param name="c">Длина стороны C, значение должно быть строго больше нуля.</param>
        /// <returns>Тип Треугольника, либо ошибка, если требования к входным параметрам не были соблюдены.</returns>
        public TriangleType Check(double a, double b, double c)
        {
            TriangleType result = TriangleType.Unknown;

            if (a <= 0)
            {
                throw new ArgumentException("a", "a");
            }
            if (b <= 0)
            {
                throw new ArgumentException("b", "b");
            }
            if (c <= 0)
            {
                throw new ArgumentException("c", "c");
            }

            if (!((a + b > c) && (b + c > a) && (c + a > b)))
            {
                result = TriangleType.Degenerated;
            }
            else
            {
                if ((a == b) && (b == c) && (a == c))
                {
                    result = TriangleType.Equilateral;
                }
                else
                {
                    if ((a == b) || (a == c) || (b == c))
                    {
                        result = TriangleType.Isosceles;
                    }
                    else if ((a * a == b * b + c * c)
                        || (b * b == c * c + a * a)
                        || (c * c == a * a + b * b))
                    {
                        result = TriangleType.Rectangular;
                    }
                }
            }

            return result;
        }
    }
}
